package edzest.basic;

public class J11_SungJuk_v4 {

	public static void main(String[] args) {
		// 객체지향 기법을 이용해서 성적처리 프로그램 작성
		J11SungJuk sj = new J11SungJuk();
		sj.name = "수지";
		sj.kor = 98;
		sj.eng = 45;
		sj.mat = 78;
		// 초기화가 불편 - 생성자를 이용할 것!
		sj = new J11SungJuk("수지", 45, 23, 98);
		
		System.out.println(sj.name);
		System.out.println(sj.kor);
		System.out.println(sj.eng);
		System.out.println(sj.mat);
		
		System.out.println(sj.getTotal());
		System.out.println(sj.getAverage());
		//System.out.println(sj.getGrade());
		//The method println(boolean) in the type 
		//PrintStream is not applicable for the arguments (void)
		sj.getGrade();
		System.out.println(sj.grd);
	}

}

// 성적 데이터 : 이름, 국어, 영어, 수학, 총점, 평균, 학점
// 성적 메서드 : 총점구하기, 평균구하기, 학점구하기, 결과 출력하기
class J11SungJuk{
	String name;
	int kor;
	int eng;
	int mat;
	int tot;
	double avg;
	char grd;
	
	public J11SungJuk() {} // 기본 생성자
	public J11SungJuk( String name, int kor, int eng, int mat ) { 
		//name = name; 
		//The assignment to variable name has no effect
		this.name = name;
		this.kor = kor;
		this.eng = eng;
		this.mat = mat;
		// 만일 기본생성자 없이 만든다면
	} // 사용자 정의 생성자
	
	// 메서드 정의
	/*void getTotal(){
		tot = kor + eng + mat;
	}
	void getAverage(){
		avg = (kor + eng + mat) / 3;
	}
	void getGrade(){
		switch( (int)((kor + eng + mat) / 3) ){
		case 10: case 9: grd = '수'; break;
		}
	}*/  // 메서드의 반환값 유형을 무조건 void로 지정
	
	int getTotal(){
		tot = kor + eng + mat;
		return tot;
		// void일때 Void methods cannot return a value
	}
	double getAverage(){
		avg = getTotal() / 3;
		// getTotal()이 void 일때
		// The operator / is undefined 
		// for the argument type(s) void, int
		return avg;
	}
	void getGrade(){
		switch( (int)getAverage() ){
		// getAverage()가 void일때
		// Cannot cast from void to int
		case 10: case 9: grd = '수'; break;
		default : grd = '가';
		}
	} // 메서드의 반환값 유형을 결과값의 종류에 따라 지정
}
